﻿//double findMedianSortedArrays(int* a1, int len1, int* a2, int len2) {
//    if (len1 == 0 && len2 == 0) return;
//    if (len1 == 0 && len2 == 1) return a2[0];
//    if (len2 == 0 && len1 == 1) return a1[0];
//    int len = len1 + len2;
//    int a[len];
//    int index1 = 0;
//    int index2 = 0;
//    int i = 0;
//    double sum = 0;
//    while (index1 < len1 && index2 < len2) {
//        if (a1[index1] < a2[index2]) {
//            a[index1 + index2] = a1[index1];
//            index1++;
//        }
//        else {
//            a[index1 + index2] = a2[index2];
//            index2++;
//        }
//    }
//    while (index1 < len1) { a[index1 + index2] = a1[index1]; index1++; }
//    while (index2 < len2) { a[index1 + index2] = a2[index2]; index2++; }
//    if (len % 2 == 0) {
//        sum = (a[len / 2] + a[len / 2 - 1]) / (double)2;
//    }
//    else sum = a[len / 2];
//
//    return sum;
//}

//改进算法
//double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
//    if (nums1Size > nums2Size)
//    {
//        return findMedianSortedArrays(nums2, nums2Size, nums1, nums1Size);
//    } //首先要满足第一个数组小于第二个数组
//    int total = nums1Size + nums2Size; //总计的数字，用于计算
//    int left = 0, right = nums1Size;
//    while (left <= right)
//    {
//        int i = (left + right) / 2; 
//        int j = (total + 1) / 2 - i;  
//        if (i < nums1Size && nums2[j - 1] > nums1[i]) 
//        {
//            left = i + 1;
//        }
//        else if (i > 0 && nums1[i - 1] > nums2[j])
//        {
//            right = i - 1;
//        }
//        else
//        {
//            int max_left = 0;
//            if (i == 0) 
//            {
//                max_left = nums2[j - 1];
//            }
//            else if (j == 0) 
//            {
//                max_left = nums1[i - 1];
//            }
//            else   
//            {
//                max_left = fmax(nums1[i - 1], nums2[j - 1]);
//            }
//            if (total % 2 == 1) 
//            {
//                return max_left;
//            }
//            int min_right = 0;
//            if (i == nums1Size) 
//            {
//                min_right = nums2[j];
//            }
//            else if (j == nums2Size)
//            {
//                min_right = nums1[i];
//            }
//            else
//            {
//                min_right = fmin(nums1[i], nums2[j]);
//            }
//            return (max_left + min_right) / 2.0;
//        }
//    }
//    return 0.0;
//}